#include "login.h"

// int fd = open( DEV_PATH , O_RDONLY );
//     if (fd < 0)
//     {
//         perror("open Dev errror");
//         return -1 ;
//     }
// char buf[64] = {0};
	
// 	    lseek(fd, 0, SEEK_SET);
// 	    read(fd, buf, sizeof(buf));
//         int x =atoi(buf);

static lv_obj_t *msgbox = NULL;   // 添加消息框对象
lv_obj_t *scr_login = NULL;
lv_obj_t *scr_main = NULL; // 添加主界面对象
lv_style_t bg_style;
lv_font_t *font_chinese;

// 添加消息框关闭事件回调
static void msgbox_event_cb(lv_event_t *e)
{
    lv_obj_t *obj = lv_event_get_target(e);
    lv_event_code_t code = lv_event_get_code(e);
    
    // 如果是按钮点击事件或者是确定按钮
    if(code == LV_EVENT_CLICKED || code == LV_EVENT_VALUE_CHANGED) 
    {
        if(msgbox != NULL) {
            lv_obj_del(msgbox);
            msgbox = NULL;
        }
    }
}

// 添加登录事件回调函数
static void login_event_cb(lv_event_t *e)
{
    lv_obj_t *btn = lv_event_get_target(e);
    lv_obj_t *user_ta = (lv_obj_t *)lv_event_get_user_data(e);
    lv_obj_t *pwd_ta = (lv_obj_t *)lv_obj_get_user_data(btn);
    
    // 获取用户名和密码
    const char *user = lv_textarea_get_text(user_ta);
    const char *pwd = lv_textarea_get_text(pwd_ta);
    
    // 验证账号密码
    if(strcmp(user, "1") == 0 && strcmp(pwd, "1") == 0) {
        // 登录成功，切换到主界面
        lv_scr_load(scr_main);
    } 
    else 
    {
        // 登录失败，清空输入框
        lv_textarea_set_text(user_ta, "");
        lv_textarea_set_text(pwd_ta, "");
        
        // 如果已有消息框，先删除
        if(msgbox != NULL) {
            lv_obj_del(msgbox);
            msgbox = NULL;
        }
        
        // 创建自定义消息框
        msgbox = lv_obj_create(lv_scr_act());
        lv_obj_set_size(msgbox, 250, 150);
        lv_obj_align(msgbox, LV_ALIGN_CENTER, 0, 0);
        
        // 设置消息框样式 - 圆角矩形，有边框
        lv_obj_set_style_bg_color(msgbox, lv_color_hex(0xFF5555), 0);
        lv_obj_set_style_bg_opa(msgbox, LV_OPA_COVER, 0);
        lv_obj_set_style_border_width(msgbox, 2, 0);
        lv_obj_set_style_border_color(msgbox, lv_color_white(), 0);
        lv_obj_set_style_radius(msgbox, 0, 0); // 设置圆角
        lv_obj_set_style_pad_all(msgbox, 10, 0); // 增加内边距
        
        // 添加错误标题
        lv_obj_t *title = lv_label_create(msgbox);
        lv_label_set_text(title, "错误");
        lv_obj_set_style_text_font(title, font_chinese, 0);
        lv_obj_set_style_text_color(title, lv_color_white(), 0);
        lv_obj_set_style_text_align(title, LV_TEXT_ALIGN_CENTER, 0);
        lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 10);
        
        // 添加错误消息
        lv_obj_t *msg = lv_label_create(msgbox);
        lv_label_set_text(msg, "账号或密码不正确!");
        lv_obj_set_style_text_font(msg, font_chinese, 0);
        lv_obj_set_style_text_color(msg, lv_color_white(), 0);
        lv_obj_set_style_text_align(msg, LV_TEXT_ALIGN_CENTER, 0);
        lv_obj_align(msg, LV_ALIGN_CENTER, 0, 0);
        
        // 添加确定按钮
        lv_obj_t *ok_btn = lv_btn_create(msgbox);
        lv_obj_set_size(ok_btn, 80, 35);
        lv_obj_align(ok_btn, LV_ALIGN_BOTTOM_MID, 0, -10);
        lv_obj_set_style_bg_color(ok_btn, lv_color_hex(0x444444), 0);
        lv_obj_set_style_radius(ok_btn, 5, 0); // 按钮圆角
        
        // 添加确定按钮文本
        lv_obj_t *ok_label = lv_label_create(ok_btn);
        lv_label_set_text(ok_label, "确定");
        lv_obj_set_style_text_font(ok_label, font_chinese, 0);
        lv_obj_set_style_text_color(ok_label, lv_color_white(), 0);
        lv_obj_center(ok_label);
        
        // 为确定按钮添加事件回调
        lv_obj_add_event_cb(ok_btn, msgbox_event_cb, LV_EVENT_CLICKED, NULL);
        
        // 为整个消息框添加点击事件（点击任意位置关闭）
        lv_obj_add_event_cb(msgbox, msgbox_event_cb, LV_EVENT_CLICKED, NULL);
    }
}

static void ta_event_cb(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t * ta = lv_event_get_target(e);
    lv_obj_t * kb = lv_event_get_user_data(e);
    if(code == LV_EVENT_FOCUSED) {
        lv_keyboard_set_textarea(kb, ta);
        lv_obj_clear_flag(kb, LV_OBJ_FLAG_HIDDEN);
        lv_obj_move_foreground(kb);
    }

    if(code == LV_EVENT_DEFOCUSED) {
        lv_keyboard_set_textarea(kb, NULL);
        lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
    }
}

/*---------各种样式初始化------------*/
/// @brief 背景色样式初始化
/// @param  lv_obj_add_style(***, &bg_style, 0);
void bg_style_init(void) 
{
    lv_style_init(&bg_style);
    // 纯净微渐变背景
    // lv_style_set_bg_color(&bg_style, lv_color_hex(0xFFFFFF)); // 白色
    // lv_style_set_bg_grad_color(&bg_style, lv_palette_main(LV_PALETTE_BLUE)); // 浅灰色
    lv_style_set_bg_color(&bg_style, lv_color_hex(0x1A1A24)); // 深蓝黑
    lv_style_set_bg_grad_color(&bg_style, lv_color_hex(0x0D0D15)); // 接近黑色
    lv_style_set_bg_grad_dir(&bg_style, LV_GRAD_DIR_VER);

    // 还可以加上一个轻微的边框色，增加精致感
    lv_style_set_border_color(&bg_style, lv_color_hex(0xEEEEEE));
    lv_style_set_border_width(&bg_style, 1);
}

/// @brief 中文字体样式初始化
/// @param  lv_obj_set_style_text_font(**, font_chinese , 0);
void chineseFontInitialization(void)
{
    static lv_ft_info_t info;
    /*FreeType uses C standard file system, so no driver letter is required.*/
    info.name = "/userdata/zjy/simhei.ttf";
    // info.name = "/zjy/simhei.ttf";
    info.weight = 20;
    info.style = FT_FONT_STYLE_NORMAL;
    info.mem = NULL;
    
    // 初始化FreeType字体
    if(!lv_ft_font_init(&info)) 
    {
        LV_LOG_ERROR("create failed.");
    }
    
    // 定义中文字体指针
    font_chinese = NULL;
    font_chinese = info.font; // 指向FreeType中的具体中文字体
}

// 添加主界面创建函数
void create_main_screen(void)
{
    scr_main = lv_obj_create(NULL);
    lv_obj_add_style(scr_main, &bg_style, 0);
    
}

/*--------------------------------------------------------------------------*/

void loginUI (void)
{
    bg_style_init();
    chineseFontInitialization();
    
    // 创建主界面
    create_main_screen();
    
    // 修复：使用lv_obj_create而不是lv_arc_create创建屏幕
    scr_login = lv_obj_create(NULL);
    lv_obj_add_style(scr_login, &bg_style, 0);
    lv_scr_load(scr_login); 
    
    // 创建标题
    lv_obj_t *title = lv_label_create(scr_login);
    lv_label_set_text(title, "管理员登录");
    lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 40);
    lv_obj_set_style_text_font(title, font_chinese, 0);
    lv_obj_set_style_text_color(title, lv_color_white(), 0);
    lv_obj_set_style_text_opa(title, LV_OPA_COVER, 0);
    
    // 用户名输入框
    lv_obj_t *user_ta = lv_textarea_create(scr_login);
    lv_obj_align(user_ta, LV_ALIGN_TOP_MID, 0, 100);
    lv_textarea_set_placeholder_text(user_ta, "请输入账号");
    lv_obj_set_style_text_font(user_ta, font_chinese, 0);
    lv_obj_set_size(user_ta, 200, 40);
    lv_textarea_set_max_length(user_ta, 20);
    lv_textarea_set_one_line(user_ta, true);
    
    // 密码输入框
    lv_obj_t *pwd_ta = lv_textarea_create(scr_login);
    lv_obj_align(pwd_ta, LV_ALIGN_TOP_MID, 0, 160);
    lv_textarea_set_placeholder_text(pwd_ta, "请输入密码");
    lv_obj_set_style_text_font(pwd_ta, font_chinese, 0);
    lv_obj_set_size(pwd_ta, 200, 40);
    lv_textarea_set_max_length(pwd_ta, 20);
    lv_textarea_set_one_line(pwd_ta, true);
    lv_textarea_set_password_mode(pwd_ta, true); // 设置密码模式
    lv_textarea_set_password_show_time(pwd_ta, 200); // 密码显示时间(ms)
    
    // 键盘
    lv_obj_t *kb = lv_keyboard_create(scr_login);
    lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN); // 让键盘隐藏
    
    // 为输入框添加事件回调
    lv_obj_add_event_cb(user_ta, ta_event_cb, LV_EVENT_ALL, kb);
    lv_obj_add_event_cb(pwd_ta, ta_event_cb, LV_EVENT_ALL, kb);
    
    // 登录按钮初始化
    lv_obj_t *login = lv_btn_create(scr_login);
    lv_obj_align(login, LV_ALIGN_TOP_MID, 0, 220);
    lv_obj_set_size(login, 190, 50);
    lv_obj_add_style(login, &bg_style, 0);
    
    // 存储密码输入框引用到登录按钮的用户数据中
    lv_obj_set_user_data(login, pwd_ta);
    
    // 添加标签和图标
    lv_obj_t *label = lv_label_create(login);
    lv_label_set_text(label, "登  录");
    lv_obj_center(label);
    lv_obj_set_style_text_font(label, font_chinese, 0);
    
    // 为登录按钮添加事件回调
    lv_obj_add_event_cb(login, login_event_cb, LV_EVENT_CLICKED, user_ta);
}

